#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

void test_fd_dup() {
	    printf("=== 测试文件描述符复制 ===\n");
	        
	        // 创建测试文件
		     int fd = open("test_dup.txt", O_CREAT | O_RDWR, 0644);
		         if (fd == -1) {
		                 perror("open");
		                         exit(EXIT_FAILURE);
		                             }
		                                 
		//                                     // 复制文件描述符
		                                         int new_fd = fcntl(fd, F_DUPFD, 0);
		                                             printf("原始fd: %d, 复制后的fd: %d\n", fd, new_fd);
		                                                 
		                                                     // 通过两个描述符写入数据
		                                                         write(fd, "通过原始fd写入\n", 16);
		                                                             write(new_fd, "通过复制fd写入\n", 16);
		                                                                 
		                                                                     // 关闭文件描述符
		                                                                         close(fd);
		                                                                             close(new_fd);
		                                                                                 
		                                                                                     // 验证文件内容
		                                                                                         printf("验证文件内容...\n");
		                                                                                             system("cat test_dup.txt");
		                                                                                             }
		
		                                                                                             int main() {
		                                                                                                 test_fd_dup();
		                                                                                                     return 0;
		                                                                                                     }
